/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import DAO.FornecedorDAO;
import DAO.ItemPedidoDAO;
import DAO.PedidoDAO;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Fornecedor;
import model.ItemPedido;
import model.Mensagem;
import model.Pedido;

/**
 *
 * @author Alberto
 */
public class Controller_pedido extends HttpServlet {

    public void gravar(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ArrayList<Object> obj = new ArrayList<Object>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {
            Pedido pedido = new Pedido();

            //pedido.setIdentificacao(request.getParameter("identificacao"));
            Random gerador = new Random();

            String nIdentificacao = String.valueOf(gerador.nextInt()) + String.valueOf(gerador.nextInt());
            System.out.println(nIdentificacao);

            while (pedido.validarIdenficacao(nIdentificacao) == false) {
                nIdentificacao = String.valueOf(gerador.nextInt()) + String.valueOf(gerador.nextInt());
            }

            pedido.setIdentificacao(nIdentificacao);

            PedidoDAO pedidoDAO = new PedidoDAO();
            pedidoDAO.criar(pedido);

            pedido = pedidoDAO.buscarIdentificacao(nIdentificacao);

            obj.add(pedido);

            out.print(objJson.toJson(obj));

        } catch (Exception e) {

            System.out.println("Erro ao criar o pedido!" + e.getMessage());

        } finally {
            out.close();
        }

    }

    public void listar(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ArrayList<Pedido> obj = new ArrayList<Pedido>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {
            PedidoDAO pedidoDAO = new PedidoDAO();
            obj = pedidoDAO.buscarPorData(request.getParameter("fornecedor"));
            out.print(objJson.toJson(obj));

        } catch (Exception e) {

            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o Pedido foi cadastrado!");

            out.print(objJson.toJson(objmsg));

        } finally {
            out.close();
        }

    }

    public void listarPendentes(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ArrayList<Pedido> obj = new ArrayList<Pedido>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {
            PedidoDAO pedidoDAO = new PedidoDAO();
            obj = pedidoDAO.buscarPorPendentes(request.getParameter("fornecedor"));
            out.print(objJson.toJson(obj));

        } catch (Exception e) {

            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o Pedido foi cadastrado!");

            out.print(objJson.toJson(objmsg));

        } finally {
            out.close();
        }

    }

    public void buscar_por_id(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        PrintWriter out = response.getWriter();
        Gson objJson = new Gson();
        PedidoDAO dao = new PedidoDAO();

        ArrayList<Pedido> arrobj = new ArrayList<Pedido>();

        try {
            arrobj.add(dao.buscarPorCodigo(Integer.parseInt(request.getParameter("codigo"))));
            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {
            System.out.println("Erro ao buscar por ID o login");
        } finally {
            out.close();
        }

    }

    public void alterar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        //criar um array list generico
        ArrayList<Object> arrobj = new ArrayList<Object>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {

            PedidoDAO pedidoDAO = new PedidoDAO();
            Pedido pedido = new Pedido();
            pedido.setId(Integer.parseInt(request.getParameter("id")));
            pedido.setStatus(Integer.parseInt(request.getParameter("status")));

            if (pedidoDAO.atualizar(pedido) == true) {
                objmsg.setMensagem("Pedido alterado com Sucesso!");
            } else {
                objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o pedido foi alterado!");
            }

            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {

            //perceba que a mensagem é gerada na controladora
            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o pedido foi alterado!!!!!!!!");
            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } finally {
            out.close();
        }

    }

    public void atualizarPedido(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        //criar um array list generico
        ArrayList<Object> arrobj = new ArrayList<Object>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {

            PedidoDAO pedidoDAO = new PedidoDAO();
            Pedido pedido = new Pedido();
            
            System.out.println(request.getParameter("pedido"));
            System.out.println(request.getParameter("fornecedor"));
            
            pedido.setId(Integer.parseInt(request.getParameter("pedido")));
            Fornecedor fornecedor = new Fornecedor();
            FornecedorDAO fornecedorDAO = new FornecedorDAO();

            fornecedor.setNome(request.getParameter("fornecedor"));

            if (fornecedor.validarFornecedor(fornecedor.getNome()) == true) {
                System.out.println("Está indo para o lugar certo");
                fornecedor = fornecedorDAO.buscarPorNome(request.getParameter("fornecedor"));
                System.out.println("Está indo para o lugar certo 2 "+ fornecedor.getId());
                pedido.setFornecedor(fornecedor);

            } else {
                System.out.println("Está indo para o lugar errado");
                throw new Exception("Fornecedor não cadastrado, por favor verificar se o nome está correto.");
            }
            
            ItemPedidoDAO itemPedidoDAO = new ItemPedidoDAO();
            itemPedidoDAO.atualizarEstoque(pedido.getId());
            System.out.println("Está antes de atualizar o pedido");
            
            pedidoDAO.atualizarPedido(pedido);
            
            
            
            
            

            objmsg.setTipo(1);
            objmsg.setMensagem("Pedido gravado com sucesso!!");
            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {

            //perceba que a mensagem é gerada na controladora
            objmsg.setMensagem(e.getMessage());
            objmsg.setTipo(2);

            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));



        } finally {
            out.close();
        }

    }

    public void pagar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        System.out.println("pahgo control");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        //criar um array list generico
        ArrayList<Object> arrobj = new ArrayList<Object>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {

            PedidoDAO pedidoDAO = new PedidoDAO();
            Pedido pedido = new Pedido();

            pedidoDAO.pagamentoEfetuado(Integer.parseInt(request.getParameter("id")));

            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {

            //perceba que a mensagem é gerada na controladora
            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o pedido foi alterado!!!!!!!!");
            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } finally {
            out.close();
        }

    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int oper = Integer.parseInt(request.getParameter("oper"));
        try {
            switch (oper) {
                case 1:
                    gravar(request, response);
                case 2:
                    listar(request, response);
                    break;
                case 3:
                    buscar_por_id(request, response);
                    break;
                case 4:
                    alterar(request, response);
                    break;
                case 5:
                    listarPendentes(request, response);
                    break;
                case 6:
                    pagar(request, response);
                    break;
                case 7:
                    atualizarPedido(request, response);
                    break;
            }

        } catch (Exception e) {
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
